Hi, Thank you for your help. But unfortunately I'm still struggling with the problem. I noticed that when printing the self.env variable in the match_request method from my API I get: <multiproduct.env.Environment object at 0x1bd1610> but when I print the self.env variable from the match_request from the TicketModule class in trac.ticket.web_ui, I get this: <ProductEnvironment u'@' at 0x7f0ce07d0d90>
I have spent a lot of time trying to understand why is my API using another environment, but I couldn't. Do you have any idea why this is happening? Thanks On Thu, Jun 27, 2013 at 3:35 PM, Matevž Bradač <[email protected]> wrote: > > On 27. Jun, 2013, at 13:55, Antonia Horincar wrote: > > > Thank you very much. It was a silly mistake on my part, however I > > don't understand why the template is being invoked when accessing the > > 'main' path and not 'api/ticket/1' and why do I still get the error > > when I access 'api/ticket/1'. > > There are two factors in this: first is the environment name which is > 'main' by > default. You can see this environment was created as part of the setup in > the > 'installer/bloodhound/environments' directory. > So in order to access any resources within a certain environment, you will > need > to specify this in the URL. In most cases this means prefixing the path > with > /main. > > The second factor has to do with the multiproduct support in Bloodhound. > Since Trac doesn't support multiple projects/products within a single > environment, all resources are accessed in more or less the same manner - > using > "global" URLs, e.g.: > /main/ticket/10 > /main/wiki/Guide > /main/admin/accounts/config > etc. > > In Bloodhound however, most of the resources belong to a specific product > and > cannot be global as it wouldn't make much sense. A specific ticket is > always > considered to be bound to a certain product, and can only be accessed > through > its product-scoped URL (there are some exceptions to this, but we'll > ignore that > for now). So instead of the ticket URL above you should now get something > like: > /main/products/<pfx>/ticket/10 > where <pfx> is the prefix of the product to which ticket belongs. > (If you navigate to the global dashboard (/main/dashboard), you will be > able > to see all the products configured for the environment.) > > Hope this helps, > matevz > > > > > On Thu, Jun 27, 2013 at 11:48 AM, Matevž Bradač <[email protected]> > wrote: > >> > >> On 26. Jun, 2013, at 23:57, Antonia Horincar wrote: > >> > >>> On Wed, Jun 26, 2013 at 9:30 PM, Matevž Bradač <[email protected]> > wrote: > >>>> > >>>> On 26. Jun, 2013, at 20:12, Antonia Horincar wrote: > >>>> > >>>>> I just noticed that in the guide[1], when reaching the step that > >>>>> requires the setting up of set$DBSTRING, it points to trac.db. I > tried > >>>>> to install Bloodhound again (in another directory), and when it came > >>>>> to setting up set$DBSTRING, I put bloodhound.db instead of trac.db. > >>>>> After finishing the installation, I opened bloodhound.db in sqlite3 > >>>>> and selected ticket 1. This time it worked and it returned: > >>>>> > 1|defect|1372269942652842|1372269942652842|||major||antonia||||new||Porc|porc > >>>>> ||@ > >>>>> > >>>> > >>>> For sqlite-based installations you probably don't need the > >>>> manual installation method, you can use the quick version[1] > >>>> and replace the step > >>>> pip install -r requirements.txt > >>>> with > >>>> pip install -r requirements-dev.txt > >>>> > >>>> [1] https://issues.apache.org/bloodhound/wiki/BloodhoundInstall > >>>> > >>>>> > >>>>> However, I installed my plugin in this copy of Bloodhound as well and > >>>>> I still get the Invalid ticket number error. > >>>> > >>>> Ok, since match_request() is being called, you can try to > >>>> retrieve the ticket from the database in that method first. > >>>> If that works, compare the self.env in match_request() > >>>> with the one in process_request() - they should match. > >>>> If it doesn't work, we'll probably need to see a bit more > >>>> code in order to make more assumptions. =) > >>> > >>> I have retrieved the ticket in the match_request method and then > >>> compared the self.env with the one in process_request and they are the > >>> same. > >>> > >>> I put the code here > >>> https://code.google.com/p/bloodhound-embeddable-objects-plugin/ > >>> (it's the first time I'm using SVN, I'm not sure I did everything > right). > >>> > >> > >> Thanks for the code, found the error. > >> The problem is that your template (ticket.html) is named the same as > Trac's, > >> and when the bhtheme plugin starts rendering, it picks that one over > yours. > >> This is then replaced in bhtheme with the Bloodhound version > (bh_ticket.html), > >> that has certain expectations on which ticket-related data should be > present in > >> order to render the ticket (e.g. author_id, attachments etc.) > >> > >> AFAIK the best method to remedy this would be to rename your template to > >> something unique in order to be processed by the engine. Something like > >> bh_emb_ticket.html or similar should do the trick (the same name should > >> also be returned in the plugin's process_request() implementation). > >> > >> > >>> > >>>> > >>>>> > >>>>> [1] > https://issues.apache.org/bloodhound/wiki/BloodhoundDetailedInstallation > >>>>> > >>>>> On Wed, Jun 26, 2013 at 8:38 PM, Antonia Horincar > >>>>> <[email protected]> wrote: > >>>>>> Yes, I am. This is my entire match_request method: > >>>>>> > >>>>>> def match_request(self, req): > >>>>>> match = re.match(r'/api/ticket/([0-9]+)$', req.path_info) > >>>>>> if match: > >>>>>> req.args['id'] = match.group(1) > >>>>>> return True > >>>>>> > >>>>>> I think the problem is in the database, I might not have set it up > >>>>>> properly. When I make queries in the database, I get a 'no such > table: > >>>>>> <table>" error. But I installed everything by following this guide: > >>>>>> > https://issues.apache.org/bloodhound/wiki/BloodhoundDetailedInstallation > >>>>>> I am really confused now, I can't see why the database has no > tables in it. > >>>>>> > >>>>>> > >>>>>> On Wed, Jun 26, 2013 at 7:50 PM, Anze Staric <[email protected]> > wrote: > >>>>>>> This looks ok. Are you returning True in your match_request if > request matches? > >>>>>>> > >>>>>>> On Wed, Jun 26, 2013 at 5:44 PM, Antonia Horincar > >>>>>>> <[email protected]> wrote: > >>>>>>>> It does get called, I wrote ticket_id = req.args.get('id') in the > >>>>>>>> process_request method and then printed ticket_id. After starting > the > >>>>>>>> server, I looked in the logs and the correct id was there. I also > >>>>>>>> printed req.path_info and the output was /api/ticket/1. > >>>>>>>> > >>>>>>>> On Wed, Jun 26, 2013 at 6:34 PM, Anze Staric < > [email protected]> wrote: > >>>>>>>>> Can you try setting a breakpoint in the match_request method and > see > >>>>>>>>> what is happening? (Does it get called? What is the value of > >>>>>>>>> req.path_info?) I don't see any reason why would requests be > matched > >>>>>>>>> in global environment, but not in product ones. > >>>>>>>>> > >>>>>>>>> On Wed, Jun 26, 2013 at 5:21 PM, Antonia Horincar > >>>>>>>>> <[email protected]> wrote: > >>>>>>>>>> On Wed, Jun 26, 2013 at 6:00 PM, Matevž Bradač < > [email protected]> wrote: > >>>>>>>>>>> > >>>>>>>>>>> On 26. Jun, 2013, at 16:43, Antonia Horincar wrote: > >>>>>>>>>>> > >>>>>>>>>>>> On Wed, Jun 26, 2013 at 5:29 PM, Matevž Bradač < > [email protected]> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>> On 26. Jun, 2013, at 16:14, Antonia Horincar wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Hi Pranay, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Thanks for the link, I had a look at it yesterday, but > unfortunately > >>>>>>>>>>>>>> it doesn't help me with the error. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I'm still not sure what's causing this error to come up > every time I > >>>>>>>>>>>>>> try to access a ticket through my API. The ticket exists, I > checked > >>>>>>>>>>>>>> this in the Python interpreter. I am suspecting that the > problem might > >>>>>>>>>>>>>> be caused by the environment, but don't know why or how to > solve it. I > >>>>>>>>>>>>>> have 'forced' the API to use the > "bloodhound/environments/main" > >>>>>>>>>>>>>> environment by writing > >>>>>>>>>>>>>> env = trac.env.Environment("bloodhound/environments/main") > >>>>>>>>>>>>>> in the process_request method (I only did this so that > maybe I could > >>>>>>>>>>>>>> see what's causing the error). > >>>>>>>>>>>>>> After doing this, I tried to access the ticket again and > the error was > >>>>>>>>>>>>>> KeyError: 'author_id', and this made me think that maybe the > >>>>>>>>>>>>>> application runs on a different environment that the one I > forced my > >>>>>>>>>>>>>> API to run on. I'm definitely not sure if this is the > problem. I will > >>>>>>>>>>>>>> continue to try to solve this, but I am stuck for now. If > anyone has > >>>>>>>>>>>>>> the slightest idea on what could be the problem, that would > be more > >>>>>>>>>>>>>> than welcome. > >>>>>>>>>>>>> > >>>>>>>>>>>>> This could be related to multiproduct functionality. Could > you > >>>>>>>>>>>>> specify some more details on the following: > >>>>>>>>>>>>> - How was the ticket created? Programatically or in the web > UI? > >>>>>>>>>>>> > >>>>>>>>>>>> The ticket was created through the web UI. > >>>>>>>>>>> > >>>>>>>>>>> Ok, it should "belong" to a specific product then. Do you have > >>>>>>>>>>> multiple products set up, or are you just using the default > one? > >>>>>>>>>> > >>>>>>>>>> I am using the default one. > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> - What does the SQL dump for that ticket from the Bloodhound > DB look > >>>>>>>>>>>>> like? (e.g. something like "SELECT * FROM ticket WHERE > id=1;") > >>>>>>>>>>>> > >>>>>>>>>>>> I looked at the logs in the console but the database queries > are not > >>>>>>>>>>>> displayed. Only the requests. > >>>>>>>>>>> > >>>>>>>>>>> Correct, you have to manually run the query from the database. > >>>>>>>>>>> If you have installed Bloodhound with sqlite3 as its database, > try > >>>>>>>>>>> the following (you need to have sqlite3 installed beforehand): > >>>>>>>>>>> 1. Traverse to the "db" directory in the BH environment. IIRC > the > >>>>>>>>>>> relative path should be "bloodhound/environments/main/db". > >>>>>>>>>>> 2. Open the database with > >>>>>>>>>>> sqlite3 bloodhound.db > >>>>>>>>>>> 3. List the ticket using the select statement > >>>>>>>>>>> SELECT * FROM ticket WHERE id=<ID>; > >>>>>>>>>>> replace the <ID> part with the actual ticket ID. > >>>>>>>>>> > >>>>>>>>>> This is weird, it says Error: no such table: ticket. Did I not > >>>>>>>>>> configure the database properly then? > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> - How are you accessing that ticket from the code? I > understand it's > >>>>>>>>>>>>> from a template, is that template loaded in a specific > product > >>>>>>>>>>>>> environment or in the global one? > >>>>>>>>>>>> > >>>>>>>>>>>> The template is loaded only for my plugin, it's not a global > one. Well > >>>>>>>>>>>> actually, it doesn't load because from what I saw the error > occurs > >>>>>>>>>>>> before reaching the template. > >>>>>>>>>>> > >>>>>>>>>>> I'm assuming that the "self.env" referenced in your code > doesn't > >>>>>>>>>>> match the ticket's, or something similar. Could you dump the > >>>>>>>>>>> self.env and ticket_id from the code, so that we can compare > them > >>>>>>>>>>> to the SQL dump? > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> -- > >>>>>>>>>>>>> matevz > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>> Antonia > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> On Wed, Jun 26, 2013 at 1:29 AM, Pranay B. Sodre > >>>>>>>>>>>>>> <[email protected]> wrote: > >>>>>>>>>>>>>>> Antonia- I am trying to understand this Ticket field > myself. The place I am > >>>>>>>>>>>>>>> looking at to fully understand how this is structured is > listed below. The > >>>>>>>>>>>>>>> structure is based on code written here > >>>>>>>>>>>>>>> > http://trac.edgewall.org/browser/branches/1.0-stable/trac/ticket/model.py?rev=11830 > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Look at line 120. I am not sure if this will answer your > question, but it a > >>>>>>>>>>>>>>> place to look. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Pranay B. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> "He is richest who is content with the least, for content > is the wealth of > >>>>>>>>>>>>>>> nature."- > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Socrates > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On 25 June 2013 14:31, Antonia Horincar < > [email protected]> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I made a basic template for displaying ticket information > when > >>>>>>>>>>>>>>>> accessing a certain path, but I am having trouble with > processing the > >>>>>>>>>>>>>>>> ticket. It gives me an error "Ticket <id> does not exist" > even though > >>>>>>>>>>>>>>>> there is a ticket with the id that I entered. What I did > in my api, > >>>>>>>>>>>>>>>> after matching the request, in the process_request method > was > >>>>>>>>>>>>>>>> something like this: > >>>>>>>>>>>>>>>> data = {'ticket': model.Ticket(self.env, ticket_id)}, > where ticket_id > >>>>>>>>>>>>>>>> is the id of the req argument. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I have checked if the matching does indeed find the > correct id, and it > >>>>>>>>>>>>>>>> does. I have looked through the other Bloodhound APIs but > I found no > >>>>>>>>>>>>>>>> clue that could help me determine the cause of my error. > If anyone > >>>>>>>>>>>>>>>> encountered this error before and knows what might be > causing it, can > >>>>>>>>>>>>>>>> you please help me? I might be missing something or I > might have > >>>>>>>>>>>>>>>> misunderstood some concepts. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>> Antonia > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>> > >> > >
